/**
 * @file Game.h
 * @author  Aljosa Osep <aljosa.osep@gmail.com>
 * @version 1.0
 *
 * @section LICENSE
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details at
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @section DESCRIPTION
 *
 * This abstract class represents the game. Your application should override this class.
 */

#ifndef _GAME_H
#define	_GAME_H

#include "camera.h"
#include "World.h"




namespace xEngine
{
    namespace CoreSystem
    {
        class Game {
        public:
            Game(); // Default constructor
            Game(World *world); // Game-set constructor
            virtual ~Game(); // Destructor

            // Initialization, destruction
            virtual bool init() = 0;
            virtual void shutDown() = 0;

            // Game loop related
            virtual void draw(double deltaTime) = 0;
            virtual void update(double deltaTime) = 0;
            virtual void animate(double deltaTime) = 0;
            virtual void handleInput() = 0;

            // Setters
            void setWorld(World *world);

            // Getters
            World* getWorld() const;

        protected:
            Renderer::Camera camera; // Game camera
            World *world; // Game world


        };
    }
}

#endif	/* _Game_H */

